var express = require('express');
var router = express.Router();
var uuid = require('node-uuid');
var sql = require('./../sql');
var Order = require('./../sql/col/orders')
var Address = require('./../sql/col/addresses');

// 微信支付建议使用时间戳加上随机数作为订单的id
function getId () {
  var num = "";   //定义编号
  for (var i = 0; i < 4; i++) {
    num += Math.floor(Math.random() * 10);
  }
  var id = new Date().getTime() + num;  //时间戳，用来生成用户编号。
  return id
}

/**
 * @api {get} api/order 确认订单的订单消息
 * @apiDescription 确认订单的订单消息
 * @apiGroup order
 * @apiParam { string } orderid 订单id
 * @apiSuccessExample { json } Success-Response:
 * res.send({
      code: '200',
      message: '确认订单的订单消息',
      data
    })
 * @apiSampleRequest /api/order
 * @apiVersion 1.0.0
 */
router.get('/', function(req, res, next) {
  // 1.获取订单id
  const { orderid } = req.query
  // 2.依据订单id查询数据并且返回
  sql.find(Order, { orderid }, { _id: 0 }).then(data => {
    res.send({
      code: '200',
      message: '确认订单的订单消息',
      data: data[0]
    })
  })
});
/**
 * @api {post} api/order/add 生成订单
 * @apiDescription 生成订单
 * @apiGroup order
 * @apiParam { string } userid 用户id
 * @apiParam { string } orderlist [{}, {}]
 * @apiSuccessExample { json } Success-Response:
 * {
 *  code: '200',
 *  message: '生成订单，去确认订单',
 * orderid
 * }
 * @apiSampleRequest /api/order/add
 * @apiVersion 1.0.0
 */
router.post('/add', function(req, res, next) {
  // 1.获取数据 用户id 产品的列表数据, 总价
  // orderlist 是前端提交的数据 - 需要转为对象
  let { userid, orderlist } = req.body
  // 2.准备订单列表数据
  orderlist = JSON.parse(orderlist) // 后续需要插入对象
  // 后端计算商品总价
  let totalprice = orderlist.reduce((sum, item) => {
    return sum + item.num * item.price
  }, 0)
  // 3.依据用户id查询该用户的默认配送地址 --- 可以不做
  // 没有默认地址即为这个用户没有添加过地址，默认地址只能有一个
  sql.find(Address, {userid, isDefault: 1}, { _id: 0 }).then(data => {
    let userinfo = {
      flag: 0, // 有没有地址信息  1表示有， 0 表示没有
      name: '',
      tel: '',
      province: '',
      city: '',
      county: '',
      addressDetail: ''
    }
    if (data.length !== 0) { // 有默认地址
      userinfo = {
        flag: 1, 
        name: data[0].name,
        tel: data[0].tel,
        province: data[0].province,
        city: data[0].city,
        county: data[0].county,
        addressDetail: data[0].addressDetail,
      }
    }
    // 4.生成订单插入的数据
    const orderid = 'order_' + getId()
    const insertData = {
      orderid,
      userid,
      status: 0,
      userinfo,
      orderlist,
      totalprice
    }
    // 5.插入数据 返回orderid，用于前端获取订单信息
    sql.insert(Order, insertData).then(() => {
      res.send({
        code: '200',
        message: '生成订单，去确认订单',
        orderid
      })
    })
  })
});
/**
 * @api {get} api/order/updateAddress 修改订单收货人信息
 * @apiDescription 修改订单收货人信息
 * @apiGroup order
 * @apiParam { string } orderid 订单id
 * @apiParam { string } addressid 地址id
 * @apiSuccessExample { json } Success-Response:
 * res.send({
    code: '200',
    message: '修改地址成功'
  })
 * @apiSampleRequest /api/order/updateAddress
 * @apiVersion 1.0.0
 */
router.get('/updateAddress', (req, res, next) => {
  // 1.获取数据 orderid  addressid 
  // 通过addressid获取到地址的详情，修改 orderid 对应的收获信息
  const { orderid, addressid } = req.query
  sql.find(Address, { addressid }, { _id: 0 }).then(data => {
    // 获取参数
    const { name, tel, province, city, county, addressDetail } = data[0]
    // 拼接参数  --- flag为1表示有地址
    const updateObj = {
      name, tel, province, city, county, addressDetail,
      flag: 1
    }
    sql.update(Order, { orderid }, { $set: {userinfo: updateObj}}).then(() => {
      res.send({
        code: '200',
        message: '修改地址成功'
      })
    })
  })
})
module.exports = router;
